﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Kontrolki;
using KPWeb.Class;
using KPWeb.Data;

namespace KPWeb.Urlopy
{
    public partial class Nieobecnosci : KPPage
    {

        private short RokNieobecnosci
        {

            get
            {
                if (ViewState["RokNieobecnosci"] == null)
                    ViewState["RokNieobecnosci"] = DateTime.Now.Year;
                return short.Parse(ViewState["RokNieobecnosci"].ToString());
            }
            set
            {
                ViewState["RokNieobecnosci"] = value;

            }
        }
        private short TypStrony
        {

            get
            {
                if (ViewState["TypStrony"] == null)
                    ViewState["TypStrony"] = 1;
                return short.Parse(ViewState["TypStrony"].ToString());
            }
            set
            {
                ViewState["TypStrony"] = value;

            }
        }
        private short typNieobecnosciOd
        {
            get
            {
                if (ViewState["typNieobecnosciOd"] == null) ViewState["typNieobecnosciOd"] = 1;
                return short.Parse(ViewState["typNieobecnosciOd"].ToString());
            }
            set
            {
                ViewState["typNieobecnosciOd"] = value;
            }
        }
        private short typNieobecnosciDo
        {
            get
            {
                if (ViewState["typNieobecnosciDo"] == null) ViewState["typNieobecnosciDo"] = 1;
                return short.Parse(ViewState["typNieobecnosciDo"].ToString());
            }
            set
            {
                ViewState["typNieobecnosciDo"] = value;
            }
        }
        private List<byte> selectedID;

        public List<byte> SelectedID
        {

              get { return selectedID; }
              set { selectedID= value; }

        }
        private void inicParametry(short typStrony)
        {

            switch (TypStrony)
            {
                case 1:
                    typNieobecnosciOd = 1;
                    typNieobecnosciDo = 20;

                    break;
                case 2:
                    typNieobecnosciOd = 21;
                    typNieobecnosciDo = 40;
                   
                    break;
                case 3:
                    typNieobecnosciOd = 1;
                    typNieobecnosciDo = 255;

                    break;
                default: return;

            }
  
            tZalegly.Text = "";
            tNalezny.Text = "";
            tRazem.Text = "";
            tWykorzystano.Text = "";
            tZostalo.Text = "";
        }
        private void inicEtykiety(short typStrony)
        {
            switch (TypStrony)
            {
                case 1:
                      break;
                case 2:
                    lZalegly.Text = "";
                    lNalezny.Text = "";
                    lRazem.Text = "";
                    lWykorzystano.Text = "Dni zwolnień chorobowych:";
                    lZostalo.Text = "";
                    break;
                case 3:
                    lZalegly.Text = "";
                    lNalezny.Text = "";
                    lRazem.Text = "";
                    lWykorzystano.Text = "Łączna liczba dni na wnioskach, zwolnieniach i innych:";
                    lZostalo.Text = "";
                    break;
                default: return;

            }
        }

        private void wyliczParametry(short typStrony, int liczbaDni)
        {
            switch (TypStrony)
            {
                case 1:
                    tZalegly.Text = UrlopyK.GetUrlopyZalegly(int.Parse(Current.OsobaID), RokNieobecnosci).ToString();
                    tNalezny.Text = UrlopyK.GetUrlopyNalezny(int.Parse(Current.OsobaID), RokNieobecnosci).ToString();
                    tRazem.Text = (int.Parse(tZalegly.Text) + int.Parse(tNalezny.Text)).ToString();
                    int wypoczynkowe=NieobecnosciUrlopy.GetNieobecnosciUrlopyWypoczynkowy(int.Parse(Current.OsobaID), RokNieobecnosci);
                    int inne = NieobecnosciUrlopy.GetNieobecnosciUrlopyInne(int.Parse(Current.OsobaID), RokNieobecnosci);
                 
                    tZostalo.Text = (int.Parse(tRazem.Text) - wypoczynkowe).ToString();
                    tWykorzystano.Text = wypoczynkowe.ToString();
                    tPozostale.Text = inne.ToString();
                    break;
                case 2:
                    tWykorzystano.Text = liczbaDni.ToString();
                    break;
                case 3:
                    tWykorzystano.Text = liczbaDni.ToString();
                    break;
                default: return;

            }
        }
        private void inicCheckboxyStart(short typStrony)
        {
            SelectedID = new List<byte>();
            cTypNieobecnosciUrlopu.Items.Clear();
            foreach (vLex_TypNieobecnosciUrlopu item in UrlopyK.GetListaTypNieobecnosciUrlopu().
                Where(a => a.TypNieobecnosciUrlopuID <= typNieobecnosciDo && a.TypNieobecnosciUrlopuID >= typNieobecnosciOd).OrderBy(a => a.TypNieobecnosciUrlopuID))
            {
                this.cTypNieobecnosciUrlopu.Items.Add(new ListItem(item.KodNieobecnosciUrlopu + " - " + item.TypNieobecnosciUrlopuNazwa, item.TypNieobecnosciUrlopuID.ToString()));
                SelectedID.Add((byte)item.TypNieobecnosciUrlopuID);


                CheckBoxList1.Items.Add(new ListItem(item.KodNieobecnosciUrlopu + " - " + item.TypNieobecnosciUrlopuNazwa, item.TypNieobecnosciUrlopuID.ToString()));
            
            
            
            }
            for (int i = 0; i < cTypNieobecnosciUrlopu.Items.Count; i++)
            {
                cTypNieobecnosciUrlopu.Items[i].Selected = true;
                CheckBoxList1.Items[i].Selected = true;
            }
        }
     
        private void inicCheckboxy(short typStrony)
        {
            SelectedID = new List<byte>();
            for (int i = 0; i < cTypNieobecnosciUrlopu.Items.Count; i++)
            {
               if( cTypNieobecnosciUrlopu.Items[i].Selected)
                   SelectedID.Add(byte.Parse(cTypNieobecnosciUrlopu.Items[i].Value));

            }
        }
        private int wypelnijKalendarz()
        {
            int iTemp = 0;
         
            List<DateTime> l = new List<DateTime>();

            l.Clear();

            foreach (KP_Nieobecnosci item in NieobecnosciUrlopy.GetNieobecnosciUrlopy(int.Parse(Current.OsobaID), RokNieobecnosci))
            {
                if (item.TypNieobecnosciUrlopu >= typNieobecnosciOd && item.TypNieobecnosciUrlopu <= typNieobecnosciDo
                    && SelectedID.Contains(item.TypNieobecnosciUrlopu))
                {
                    l.Add(item.Date);
                   iTemp += 1;
                }

            }
            this.CalendarUC1.Selected = l.ToArray();
            return iTemp;
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            List<DateTime> l = new List<DateTime>();

            if (!this.IsPostBack)
            {
                TypStrony = short.Parse(Request["value"]);
                RokNieobecnosci = short.Parse(DateTime.Now.Year.ToString());
                Rok.Text = RokNieobecnosci.ToString();

              //  this.CalendarUC1.Years = new int[] { RokNieobecnosci };
                this.CalendarUC1.AllowHolidaysChecking = false;
                this.CalendarUC1.DateStart = new DateTime(RokNieobecnosci,1,1);
                this.CalendarUC1.IsDisabled = true;

                foreach (var item in Kalendarz.GetSwieta(RokNieobecnosci))
                {
                    l.Add(new DateTime(item.year, item.month, item.day));
                }
                this.CalendarUC1.Holidays = l.ToArray();

                dYear.Items.Clear();
                foreach (short item in Kalendarz.GetYearGdzieWpisanoSwieta())
                {
                    this.dYear.Items.Add(item.ToString());
                }
                dYear.SelectedValue = DateTime.Now.Year.ToString();


                inicParametry(TypStrony);
                inicEtykiety(TypStrony);
                inicCheckboxyStart(TypStrony);

                wyliczParametry(TypStrony, wypelnijKalendarz());
            }
            else
            {
                this.CalendarUC1.RenderCalendar();
            }
            }

        protected void CalendarUC1_UserControlRefreshedE(object sender, CalendarUC.ActionEvent e)
        {
          
                this.CalendarUC1.ClearUnavailablePeriods();
                DateTime since = new DateTime(RokNieobecnosci, 1, 1);
                DateTime until = new DateTime(RokNieobecnosci, 12, 31);

                DateTime zatrOd = DateTime.Parse(Current.DataZatrudnieniaOd);
                DateTime zatrDo = DateTime.Parse(Current.DataZatrudnieniaDo);


                if (zatrOd > since && zatrOd > until || zatrDo < since && zatrDo < until) this.CalendarUC1.AddUnavailablePeriod(since, until);
                else
                    if (zatrOd > since && zatrOd < until) this.CalendarUC1.AddUnavailablePeriod(since, zatrOd.AddDays(-1));

                if (zatrDo > since && zatrDo < until) this.CalendarUC1.AddUnavailablePeriod(zatrDo.AddDays(1), until);

        }

        protected void cTypNieobecnosciUrlopu_SelectedIndexChanged(object sender, EventArgs e)
        {
            inicCheckboxy(TypStrony);
            wyliczParametry(TypStrony, wypelnijKalendarz());
        }

        protected void dYear_SelectedIndexChanged(object sender, EventArgs e)
        {
            RokNieobecnosci = short.Parse(dYear.SelectedValue);
            Rok.Text = RokNieobecnosci.ToString();
            inicCheckboxy(TypStrony);
            wyliczParametry(TypStrony, wypelnijKalendarz());
        }


    }
}